In packet networks, some flows may need to traverse a predetermined ordered set of network functions (NFs). The network functions may be virtualized as Virtualized Network Functions (VNFs) and implemented in various locations in the network, as opposed to Physical Network Functions (PNFs) implemented in physical boxes where the flow is forced to traverse the network functions of the physical middle boxes as they sit on the physical link or defined by their IP address.
Several methods can be used to force flows to traverse an ordered set of NFs. One of these methods is a source routing method and consists of inserting an ordered set of network function identifiers in the header for all packets corresponding to the flow, and then forwarding the packets from NF to NF as instructed in the header. A second method is based on label forwarding where a locally significant label is inserted by a NF1 when forwarding a packet to NF2 to instruct NF2 how to process and forward the packet to the following NF, the label being swapped at each NF. A third method is based on service header forwarding where a globally significant flow identifier is inserted and examined at each NF to determine how to process and forward the packet.
Some NFs are implemented by chaining other functions and additional NFs. Static service chains lead to performance degradation in packet forwarding as packets unnecessarily traverse NFs as some NFs only need to be traversed by the first packet of a flow, for example, to perform load balancing decisions. Dynamic service chains require complex network configuration and routing.